package modelo.alimentacion;

import java.util.HashMap;
import java.util.List;

import modelo.ProduccionDiaria;
import modelo.Vaca;
import modelo.alimentacion.MezcladorDeConcentrados.RequerimientoProteico;

/**
 * La cantidad de concentrados necesarios por cada vaca depende de su producción de leche y la calidad del forraje
 * @author xime
 *
 */

public class PlanDeAlimentacion {
	
	private Vaca vaca; 
	private CalidadDeForraje calidadForraje;
	
	public static enum CalidadDeForraje{
		POBRE,
		MEDIO,
		BAJO
	}
	
	public PlanDeAlimentacion(Vaca vaca){
		this.vaca=vaca;
		this.calidadForraje=CalidadDeForraje.MEDIO;
	}
	
	
	/**
	 * @see http://babcock.wisc.edu/node/151
	 * @return cantidad diaria de concentrado en base a las caracteristicas de la vaca y a la produccion de leche reciente
	 */
	public float getCantDeMezcla(){
		ProduccionDiaria produccionReciente= vaca.getProduccionReciente();
		float porcentajeGrasa= produccionReciente.getPorcentajeGrasa();
		int produccionDeLeche= (int) produccionReciente.getCantidad();
		new RequerimientoEnergetico();
		return RequerimientoEnergetico.instance.calcular(
				vaca.getPesoVivoInicial(), 
				produccionDeLeche, 
				porcentajeGrasa);
	}
	
	public List<Concentrado> getMezcla(){
		RequerimientoProteico reqProteico;
		switch(vaca.getEtapa()){
			case SECA: {
				reqProteico= RequerimientoProteico.BAJO;
				break;
			}
			case INICIO_LACTANCIA: {
				reqProteico= RequerimientoProteico.ALTO;
				break;
			}
			default: reqProteico= RequerimientoProteico.MEDIO;
		}
		return MezcladorDeConcentrados.getMezcla(reqProteico);
	}
}
